iT邦幫忙

DAY 25
3

從零開始開發Web應用程式系列 第 25

Web應用程式開發-SQL StoreProcedure

  • 分享至 

  • xImage
  •  

此篇要說明的是StoreProcedure,中文是預儲程序,MSDN的說明:
在 SQL Server 2008 R2 中建立 Transact-SQL 或 Common Language Runtime (CLR) 預存程序。預存程序類似於其他程式設計語言中的程序,這些程序可以:
接受輸入參數,並以輸出參數的形式將多個數值傳回呼叫程序或批次處理。
包含可在資料庫中執行作業的程式陳述式,包括呼叫其他程序。
將狀態值傳回呼叫程序或批次處理,以指示成功或失敗 (及失敗原因)。
使用此陳述式在目前的資料庫中建立永久程序,或在 tempdb 資料庫中建立暫存程序。

簡而言之,就是預先儲存在資料庫的執行程序,包含商業邏輯的處理,因此,他類似程式對系統的資料流處理,但要做在程式端,或是資料庫端,都可以,但StoreProcedure安全性高、效能好,也看過有的系統中,是沒有任何SQL的,所有與資料庫的互動,全都透過StoreProcedure,因此會在資料庫中建立相當多的StoreProcedure,這也是一種開發架構,但是程式在DEBUG時,會比較不方便,因為DEBUG下中斷點,無法看到完整的SQL,有時還是要回到資料庫端去找問題,因此也說明了,沒有百分之百所謂最好的架構,任何一種技術都有優點也有缺點.

下列舉個簡單的例子,是從EXCEL讀取資料,並透過StoreProcedure來完成
CREATE PROCEDURE FromExcel
AS

declare @F1 nvarchar(255) , @F2 float, @F3 float

declare test_cursor cursor for
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Data Source=C:\book1.xls;Extended Properties=Excel 8.0')...[Sheet1$]

open test_cursor

fetch next from test_cursor into @F1,@F2,@F3
while @@fetch_status=0
begin
if (@F1<>'') begin
update test set LV_PR=@F2,COS_R1=@F3 where (ORD_NO=@F1)
end
fetch next from test_cursor into @F1,@F2,@F3

end
close test_cursor
deallocate test_cursor

各種不同的系統因為開發的架構不一樣,但StoreProcedure存在的機率很高,特別是接手客戶端的維護系統時,千奇百怪的做法都有,當然也少不了StoreProcedure,因此即使不會建立,也要能看得懂,或做修改,才能進一步維護

另外ASP.NET有以C#去撰寫StoreProcedure,再註冊回資料庫的方法,避免StoreProcedure的語法比較不直覺,因此工程師可以用熟悉的C#去做,寫法和一般的ADO.NET差不多,這也是另一個解決方案,當對StoreProcedure的語法不熟悉時,至少可以用C#去寫,再把StoreProcedure編譯後,註冊回資料庫.


上一篇
Web應用程式開發-SQL Trigger
下一篇
Web應用程式開發-SQL 日期型態
系列文
從零開始開發Web應用程式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
krarm
iT邦好手 1 級 ‧ 2011-10-22 09:16:35

SQL StoreProcedure在crystal report等類的報表應用上
真的很好用

我要留言

立即登入留言